import request from '@/utils/request'

// 设备类型枚举
export const EquipmentType = {
  MECHANICAL: '机械类',
  ELECTRICAL: '电气设备',
  PROCESS: '工艺设备',
  INSTRUMENT: '仪表设备'
} as const

// 设备状态枚举
export const EquipmentStatus = {
  RUNNING: '正常运行',
  MAINTENANCE: '维护中',
  FAULT: '故障',
  STANDBY: '闲置'
} as const

// 设备列表查询参数接口
export interface EquipmentQueryParams {
  equipmentType?: string;
  equipmentName?: string;
  status?: string;
  location?: string;
  pageNum?: number;
  pageSize?: number;
}

// 设备详情接口
export interface EquipmentDetail {
  id: number;
  name: string;
  type: string;
  status: string;
  lastMaintenanceTime?: string;
  lastRepairTime?: string;
  parameters?: string;
  location?: string;
}

// 设备统计数据接口
export interface EquipmentStats {
  byType: {
    type: string;
    count: number;
  }[];
  byStatus: {
    status: string;
    count: number;
  }[];
}

// 模拟数据
const mockStats = {
  byType: [
    { type: EquipmentType.MECHANICAL, count: 6 },
    { type: EquipmentType.ELECTRICAL, count: 4 },
    { type: EquipmentType.PROCESS, count: 8 },
    { type: EquipmentType.INSTRUMENT, count: 5 }
  ],
  byStatus: [
    { status: EquipmentStatus.RUNNING, count: 15 },
    { status: EquipmentStatus.MAINTENANCE, count: 3 },
    { status: EquipmentStatus.FAULT, count: 2 },
    { status: EquipmentStatus.STANDBY, count: 3 }
  ]
}

// 生成随机时间
const getRandomDate = () => {
  const start = new Date(2024, 0, 1)
  const end = new Date()
  return new Date(start.getTime() + Math.random() * (end.getTime() - start.getTime())).toISOString().split('T')[0]
}

// 生成随机设备参数
const getRandomParameters = (type: string) => {
  switch (type) {
    case EquipmentType.MECHANICAL:
      return `型号: XJ${Math.floor(Math.random() * 1000)}, 功率: ${Math.floor(Math.random() * 100)}kW`
    case EquipmentType.ELECTRICAL:
      return `型号: DL${Math.floor(Math.random() * 1000)}, 电压: ${Math.floor(Math.random() * 380)}V`
    case EquipmentType.PROCESS:
      return `型号: GY${Math.floor(Math.random() * 1000)}, 处理量: ${Math.floor(Math.random() * 1000)}m³/h`
    case EquipmentType.INSTRUMENT:
      return `型号: YB${Math.floor(Math.random() * 1000)}, 精度: ${(Math.random() * 0.1).toFixed(3)}`
    default:
      return '未知参数'
  }
}

// 生成模拟的设备列表数据
const generateMockList = () => {
  const list = []
  const equipmentTypes = [
    EquipmentType.MECHANICAL,
    EquipmentType.ELECTRICAL,
    EquipmentType.PROCESS,
    EquipmentType.INSTRUMENT
  ]
  const statusTypes = [
    EquipmentStatus.RUNNING,
    EquipmentStatus.MAINTENANCE,
    EquipmentStatus.FAULT,
    EquipmentStatus.STANDBY
  ]
  const locations = ['1号处理区', '2号处理区', '3号处理区', '污泥处理区', '进水泵房']

  // 生成23条测试数据
  for (let i = 1; i <= 23; i++) {
    const type = equipmentTypes[Math.floor(Math.random() * equipmentTypes.length)]
    list.push({
      id: i,
      name: `设备${i}`,
      type,
      status: statusTypes[Math.floor(Math.random() * statusTypes.length)],
      lastMaintenanceTime: getRandomDate(),
      lastRepairTime: getRandomDate(),
      parameters: getRandomParameters(type),
      location: locations[Math.floor(Math.random() * locations.length)]
    })
  }
  return list
}

const mockEquipmentList = {
  total: 23,
  list: generateMockList()
}

/**
 * 获取设备列表
 * 
 * 后端实现要点：
 * 1. 支持分页查询，返回 { list: EquipmentDetail[], total: number }
 * 2. 支持按设备类型、名称、状态筛选
 * 3. 返回的数据需要包含设备的基本信息
 */
export function getEquipmentList(params: EquipmentQueryParams) {
  return Promise.resolve({ data: mockEquipmentList })
}

/**
 * 获取设备统计数据
 * 
 * 后端实现要点：
 * 1. 统计各类型设备数量
 * 2. 统计各状态设备数量
 * 3. 返回格式参考 EquipmentStats 接口
 */
export function getEquipmentStats() {
  return Promise.resolve({ data: mockStats })
}

/**
 * 导出设备数据
 * 
 * 后端实现要点：
 * 1. 支持按查询条件导出
 * 2. 返回 Excel 文件流
 * 3. 设置正确的 Content-Type 和 Content-Disposition
 */
export function exportEquipment(params: EquipmentQueryParams) {
  return Promise.resolve()
}

/**
 * 导入设备数据
 * 
 * 后端实现要点：
 * 1. 支持 Excel 文件上传
 * 2. 数据格式校验
 * 3. 批量保存设备信息
 * 4. 返回导入结果统计
 */
export function importEquipment(file: FormData) {
  return Promise.resolve()
}

/**
 * 新增设备
 * 
 * 后端实现要点：
 * 1. 参数校验
 * 2. 保存设备基本信息
 * 3. 返回新增设备的完整信息
 */
export function addEquipment(data: Partial<EquipmentDetail>) {
  return Promise.resolve()
}

/**
 * 更新设备信息
 * 
 * 后端实现要点：
 * 1. 参数校验
 * 2. 检查设备是否存在
 * 3. 更新设备信息
 * 4. 返回更新后的设备信息
 */
export function updateEquipment(id: number, data: Partial<EquipmentDetail>) {
  return Promise.resolve()
}

/**
 * 删除设备
 * 
 * 后端实现要点：
 * 1. 检查设备是否存在
 * 2. 检查设备是否可以删除
 * 3. 删除设备相关数据
 */
export function deleteEquipment(id: number) {
  return Promise.resolve()
} 